package crm.benedicto.dao;
import crm.benedicto.beans.Rol;
import crm.benedicto.excepciones.PersistenException;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class RolDAO {    
    Connection conexion;
    private final String SQL_LIST = "select * from rol";
    private final String SQL_FIND = "select * from rol where idrol = ?";
    private final String SQL_INSERT = "insert into rol values(?,?,?)";
    private final String SQL_UPDATE = "update rol set nombre=?, descripcion=? where idrol = ?";
    private final String SQL_DELETE = "delete rol where idrol = ?";
    
    public RolDAO(ConnectionManager cm){
        this.conexion = cm.getConnection();
    }
    
    public boolean adicionar(Rol rol) throws PersistenException{
       boolean correcto = false;
       PreparedStatement comando = null;
       try{
           comando = conexion.prepareCall(SQL_INSERT);
           comando.setInt(1, rol.getId());
           comando.setString(2, rol.getNombre());
           comando.setString(3, rol.getDescripcion());
           if(comando.executeUpdate()>=1){
               correcto = true;
           }
       }catch(Exception e){
           throw new PersistenException(e.getMessage());
       }finally{
           try{
               comando.close();
           }catch(Exception e){
           }
       }
       return correcto;
    }
    
    public boolean editar(Rol rol) throws PersistenException{
       boolean correcto = false;
       PreparedStatement comando = null;
       try{
           comando = conexion.prepareCall(SQL_UPDATE);           
           comando.setString(1, rol.getNombre());
           comando.setString(2, rol.getDescripcion());
           comando.setInt(3, rol.getId());
           if(comando.executeUpdate()>=1){
               correcto = true;
           }
       }catch(Exception e){
           throw new PersistenException(e.getMessage());
       }finally{
           try{
               comando.close();
           }catch(Exception e){
           }
       }
       return correcto;
    }
    
    public boolean eliminar(Rol rol) throws PersistenException{
       boolean correcto = false;
       PreparedStatement comando = null;
       try{
           comando = conexion.prepareCall(SQL_DELETE);
           comando.setInt(1, rol.getId());           
           if(comando.executeUpdate()>=1){
               correcto = true;
           }
       }catch(Exception e){
           throw new PersistenException(e.getMessage());
       }finally{
           try{
               comando.close();
           }catch(Exception e){
           }
       }
       return correcto;
    }
    
     public List<Rol> getListRoles() throws PersistenException {
        List<Rol> lista = null;
        PreparedStatement comando = null;
        try{            
            comando = conexion.prepareStatement(SQL_LIST);                       
            ResultSet resultado = comando.executeQuery();
            lista= new ArrayList<Rol>();
            while(resultado.next()){
                Rol rol = new Rol();
                rol.setId(resultado.getInt("IDROL"));
                rol.setNombre(resultado.getString("NOMBRE"));
                rol.setDescripcion(resultado.getString("DESCRIPCION"));
                lista.add(rol);
            }            
            resultado.close();
        }catch(Exception e){            
            throw new PersistenException(e.getMessage());
        }finally{
            try{
                comando.close();
            }catch(Exception e){                
            }
        }                                
        return lista;
    }
    
     public Rol bucarPorId(int id) throws PersistenException {
        Rol rol = null;
        PreparedStatement comando = null;
        try{            
            comando = conexion.prepareStatement(SQL_FIND);                       
            comando.setInt(1, id);
            ResultSet resultado = comando.executeQuery();
            if(resultado.next()){
                rol = new Rol();
                rol.setId(resultado.getInt("IDROL"));
                rol.setNombre(resultado.getString("NOMBRE"));
                rol.setDescripcion(resultado.getString("DESCRIPCION"));                
            }            
            resultado.close();
        }catch(Exception e){            
            throw new PersistenException(e.getMessage());
        }finally{
            try{
                comando.close();
            }catch(Exception e){                
            }
        }                                
        return rol;
    }
}
